#include"bsp_uart.h"
void uart_io_init(void)
{
    IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX,0x00000000);		/* 复用为UART1_TX */
	IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX,0X000010B0);

    IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX,0x00000000);		/* 复用为UART1_RX */
	IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX,0X000010B0);
}
void uart_init(void)
{
    uart_io_init();
    UART1->UCR1 &= ~(1<<0);//禁止UART1
    UART1->UCR2 &= ~(1<<0);//复位UART1
    while((UART1->UCR2 & 0x1) == 0);//等待复位完成
    UART1->UCR1 = 0;//清除UART1；
    UART1->UCR1 &= ~(1<<14);
    UART1->UCR2 |= (1<<1);//开启接收
    UART1->UCR2 |= (1<<2);//开启发送
    UART1->UCR2 |= (1<<5);//8位数据位
    UART1->UCR2 &= ~(1<<6);//1位停止位
    UART1->UCR2 &= ~(1<<8);//禁止奇偶校验
    UART1->UCR2 |= (1<<14);//忽略RTS引脚
	UART1->UCR3 |= 1<<2; 
	UART1->UFCR = 5<<7; //ref freq等于ipg_clk/1=80Mhz
	UART1->UBIR = 71;
	UART1->UBMR = 3124;
    UART1->UCR1 |= (1<<0);//使能UART1
}

/*
 * @description : 发送一个字符
 * @param - c	: 要发送的字符
 * @return		: 无
 */
void putc(unsigned char c)
{
	while(((UART1->USR2 >> 3) &0X01) == 0);/* 等待上一次发送完成 */
	UART1->UTXD = c & 0XFF; 				/* 发送数据 */
}

/*
 * @description : 发送一个字符串
 * @param - str	: 要发送的字符串
 * @return		: 无
 */
void puts(char *str)
{
	char *p = str;

	while(*p)
		putc(*p++);
}

/*
 * @description : 接收一个字符
 * @param 		: 无
 * @return		: 接收到的字符
 */
unsigned char getc(void)
{
	while((UART1->USR2 & 0x1) == 0);/* 等待接收完成 */
	return UART1->URXD;				/* 返回接收到的数据 */
}

/*
 * @description : 防止编译器报错
 * @param 		: 无
 * @return		: 无
 */
void raise(int sig_nr) 
{

}